home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Mac Mania 5
/
MacMania 5.toast
/
/
Internet software
/
NewsWatcher
/
NW Source
/
Source
/
charset.c
< prev
next >
Wrap
Text File
|
1997-01-09
|
4KB
|
177 lines
/*----------------------------------------------------------------------------
charset.c
This module deals with character set issues (currently only
ISO 8859-1, Latin-1).
Copyright © 1994-1997, Northwestern University.
----------------------------------------------------------------------------*/
#include <string.h>
#include "glob.h"
#include "charset.h"
#include "header.h"
#include "memutil.h"
#include "resutil.h"
#define kLatin1ToMacTableID 1001
#define kMacToLatin1TableID 1002
#define kTableRsrcType 'taBL'
static unsigned char **gLatin1ToMacTable = nil;
static unsigned char **gMacToLatin1Table = nil;
/*----------------------------------------------------------------------------
MapLatin1ToMacPtr
Map Latin-1 8 bit characters to Mac 8 bit characters.
Entry: ptr = pointer to text to be mapped.
len = length of text.
Exit: function result = true if any 8 bit characters encountered.
----------------------------------------------------------------------------*/
Boolean MapLatin1ToMacPtr (char *ptr, long len)
{
unsigned char *p, *pEnd;
Boolean result = false;
OSErr err = noErr;
unsigned char *table;
if (gLatin1ToMacTable == nil) {
err = MyGet1Resource(kTableRsrcType, kLatin1ToMacTableID, &gLatin1ToMacTable);
if (err != noErr) return false;
}
table = *gLatin1ToMacTable;
for (p = (unsigned char*)ptr, pEnd = p + len; p < pEnd; p++) {
if ((char)*p < 0) {
*p = table[*p];
result = true;
}
}
return result;
}
/*----------------------------------------------------------------------------
MapLatin1ToMacHandle
Map Latin-1 8 bit characters to Mac 8 bit characters.
Entry: text = handle to text to be mapped.
Exit: function result = true if any 8 bit characters encountered.
----------------------------------------------------------------------------*/
Boolean MapLatin1ToMacHandle (Handle text)
{
char state;
Boolean result;
state = MyHGetState(text);
MyHLock(text);
result = MapLatin1ToMacPtr(*text, MyGetHandleSize(text));
MyHSetState(text, state);
return result;
}
/*----------------------------------------------------------------------------
MapLatin1ToMacStr
Map Latin-1 8 bit characters to Mac 8 bit characters.
Entry: str1 = pointer to source string.
str2 = pointer to destination string (may be same as str1).
Exit: function result = true if any 8 bit characters encountered.
----------------------------------------------------------------------------*/
void MapLatin1ToMacStr (char *str1, char *str2)
{
unsigned char *p, *q;
OSErr err = noErr;
unsigned char *table;
if (gLatin1ToMacTable == nil) {
err = MyGet1Resource(kTableRsrcType, kLatin1ToMacTableID, &gLatin1ToMacTable);
if (err != noErr) return;
}
table = *gLatin1ToMacTable;
for (p = (unsigned char*)str1, q = (unsigned char*)str2; *p != 0; p++, q++) {
*q = table[*p];
}
*q = 0;
}
/*----------------------------------------------------------------------------
MapMacToLatin1Ptr
Map Mac 8 bit characters to Latin-1 8 bit characters.
Entry: ptr = pointer to text to be mapped.
len = length of text.
Exit: function result = true if any 8 bit characters encountered.
----------------------------------------------------------------------------*/
Boolean MapMacToLatin1Ptr (char *ptr, long len)
{
unsigned char *p, *pEnd;
Boolean result = false;
OSErr err = noErr;
unsigned char *table;
if (gMacToLatin1Table == nil) {
err = MyGet1Resource(kTableRsrcType, kMacToLatin1TableID, &gMacToLatin1Table);
if (err != noErr) return false;
}
table = *gMacToLatin1Table;
for (p = (unsigned char*)ptr, pEnd = p + len; p < pEnd; p++) {
if ((char)*p < 0) {
*p = table[*p];
result = true;
}
}
return result;
}
/*----------------------------------------------------------------------------
MapMacToLatin1Handle
Map Mac 8 bit characters to Latin-1 8 bit characters.
Entry: text = handle to text to be mapped.
Exit: function result = true if any 8 bit characters encountered.
----------------------------------------------------------------------------*/
Boolean MapMacToLatin1Handle (Handle text)
{
char state;
Boolean result;
state = MyHGetState(text);
MyHLock(text);
result = MapMacToLatin1Ptr(*text, MyGetHandleSize(text));
MyHSetState(text, state);
return result;
}